package logic.service;

import dao.GradesDAO;
import dao.GroupDAO;
import dao.StudentDAO;
import entity.ClassGroup;
import entity.Grades;
import entity.Student;
import java.util.ArrayList;
import java.util.List;
import javax.persistence.EntityManager;
import vo.GradesVO;
import vo.IValueObject;

/**
 *
 * @author Alexander
 */
public class GradesService implements IService {

    @Override
    public void persist(IValueObject vo, EntityManager em) {
        Grades entity = new Grades();
        entity.setId(((GradesVO) vo).getId());
        entity.setValue(((GradesVO) vo).getValue());
        entity.setPercentage(((GradesVO) vo).getPercentage());
        entity.setType(((GradesVO) vo).getType());
        entity.setTotal(((GradesVO) vo).getTotal());
        entity.setGroup((ClassGroup) new GroupDAO().find(((GradesVO) vo).getGroupId(), em));

        new GradesDAO().persist(entity, em);
    }

    @Override
    public IValueObject find(Object id, EntityManager em) {
        Grades calif = (Grades) new GradesDAO().find(id, em);
        if (calif != null) {
            return calif.toVO();
        } else {
            return null;
        }
    }

    @Override
    public void update(IValueObject vo, EntityManager em) {
        Grades entity = new Grades();
        entity.setId(((GradesVO) vo).getId());
        entity.setValue(((GradesVO) vo).getValue());
        entity.setPercentage(((GradesVO) vo).getPercentage());
        entity.setType(((GradesVO) vo).getType());
        entity.setTotal(((GradesVO) vo).getTotal());
        entity.setGroup((ClassGroup) new GroupDAO().find(((GradesVO) vo).getGroupId(), em));

        new GradesDAO().update(entity, em);
    }

    @Override
    public void delete(Object id, EntityManager em) {
        new GradesDAO().delete(id, em);
    }

    @Override
    public List<IValueObject> getList(EntityManager em) {
        List<IValueObject> gradesVO = new ArrayList<>();
        for (Object grade : new GradesDAO().getList(em)) {
            gradesVO.add(((Grades) grade).toVO());
        }
        return gradesVO;
    }

    public List<IValueObject> findByUser(String user, EntityManager em) {
        Student student = (Student) new StudentDAO().find(user, em);

        List<Grades> list2 = new ArrayList<>();
        List<IValueObject> ret = new ArrayList<>();

        list2 = new GradesDAO().findByUser(student, em);

        for (Grades g : list2) {
            ret.add(g.toVO());
        }

        return ret;
    }

    public List<GradesVO> gradesList(String user, Integer subjCode, EntityManager em) {
        return new GradesDAO().gradesList(user, subjCode, em);
    }
}
